﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Model;
using Model.Models;
using Persistence;
namespace Services
{
    public class GerenciadorEstado
    {
        private IUnitOfWork unitOfWork;
        private bool shared;

        public GerenciadorEstado()
        {
            this.unitOfWork = new UnitOfWork();
            shared = false;
        }

        internal GerenciadorEstado(IUnitOfWork unitOfword)
        {
            this.unitOfWork = unitOfword;
            shared = true;
        }

        public int Inserir(EstadoModel estadoModel)
        {
            TB_ESTADO estadoE = new TB_ESTADO();
            Atribuir(estadoModel, estadoE);
            unitOfWork.RepositorioEstado.Inserir(estadoE);
            unitOfWork.Commit(shared);
            return estadoE.id_estado;

        }


        public void Editar(EstadoModel estadoModel)
        {
            TB_ESTADO estadoE = new TB_ESTADO();
            Atribuir(estadoModel, estadoE);
            unitOfWork.RepositorioEstado.Editar(estadoE);
            unitOfWork.Commit(shared);
        }

        public void Remover(int idEstado)
        {
            unitOfWork.RepositorioEstado.Remover(estado => estado.id_estado.Equals(idEstado));
            unitOfWork.Commit(shared);

        }

        private IQueryable<EstadoModel> GetQuery()
        {
            IQueryable<TB_ESTADO> tb_estado = unitOfWork.RepositorioEstado.GetQueryable();
            var query = from estado in tb_estado
                        orderby (estado.nome)
                        select new EstadoModel
                        {
                            Id_estado = estado.id_estado,
                            Uf = estado.uf,
                            Nome = estado.nome
                            
                        };
            return query;
        }

        public IEnumerable<EstadoModel> ObterTodos()
        {
            return GetQuery();
        }

        public EstadoModel Obter(int idEstadoModel)
        {
            IEnumerable<EstadoModel> estadoEs = GetQuery().Where(estadoModel => estadoModel.Id_estado.Equals(idEstadoModel));
            return estadoEs.ElementAtOrDefault(0);
        }


        private void Atribuir(EstadoModel estadoModel, TB_ESTADO estadoE)
        {
            estadoE.id_estado = estadoModel.Id_estado;
            estadoE.uf = estadoModel.Uf;
            estadoE.nome = estadoModel.Nome;

        }
    }
}